828614d8b90b0dad4f5a52d0cb9dca07384b1935,drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java,RuleBuilder,build,#Column#PredicateDescr#,383
Before Change
String classMethodName = "predicate" + counter++;
predicateDescr.setClassMethodName( classMethodName );
root.put( "package",
this.pkg.getName() );
root.put( "ruleClassName",
ucFirst( this.ruleDescr.getClassName() ) );
root.put( "invokerClassName",
ruleDescr.getClassName() + ucFirst( classMethodName ) + "Invoker" );
root.put( "methodName",
classMethodName );
Class clazz = ((ClassObjectType) column.getObjectType()).getClassType();
FieldExtractor extractor = new ClassFieldExtractor( clazz,
predicateDescr.getFieldName() );
Declaration declaration = column.addDeclaration( predicateDescr.getDeclaration(),
extractor );
this.declarations.put( declaration.getIdentifier(),
declaration );
List usedDeclarations = this.analyzer.analyze( predicateDescr.getText(),
this.declarations.keySet() );
// Don't include the focus declaration, that hasn't been merged into the tuple yet.
usedDeclarations.remove( predicateDescr.getDeclaration() );
Declaration[] declarations = new Declaration[usedDeclarations.size()];
for ( int i = 0, size = usedDeclarations.size(); i < size; i++ ) {
declarations[i] = (Declaration) this.declarations.get( (String) usedDeclarations.get( i ) );
}
root.put( "declarations",
declarations );
root.put( "declaration",
declaration );
root.put( "globals",
getUsedGlobals( predicateDescr.getText() ) );
root.put( "globalTypes",
this.pkg.getGlobals() );
root.put( "text",
predicateDescr.getText() );
PredicateConstraint predicateConstraint = new PredicateConstraint( declaration,
declarations );
column.addConstraint( predicateConstraint );
Template template = this.cfg.getTemplate( "predicateMethod.ftl" );
StringWriter string = new StringWriter();
template.process( root,
string );
string.flush();
this.methods.add( string.toString() );
template = this.cfg.getTemplate( "predicateInvoker.ftl" );
string = new StringWriter();
template.process( root,
string );
string.flush();
String invokerClassName = ruleDescr.getClassName() + ucFirst( classMethodName ) + "Invoker";
this.invokeables.put( invokerClassName,
After Change
FieldExtractor extractor = getFieldExtractor( predicateDescr,
clazz,
predicateDescr.getFieldName() );
if ( extractor == null ) {
return;
}
Declaration declaration = column.addDeclaration( predicateDescr.getDeclaration(),
extractor );
this.declarations.put( declaration.getIdentifier(),
declaration );
List usedDeclarations = getUsedDeclarations( predicateDescr,
predicateDescr.getText() );
if ( usedDeclarations == null ) {
return;
}
// Don't include the focus declaration, that hasn't been merged into the tuple yet.
usedDeclarations.remove( predicateDescr.getDeclaration() );
Declaration[] declarations = new Declaration[usedDeclarations.size()];
for ( int i = 0, size = usedDeclarations.size(); i < size; i++ ) {
declarations[i] = (Declaration) this.declarations.get( (String) usedDeclarations.get( i ) );
}
PredicateConstraint predicateConstraint = new PredicateConstraint( declaration,
declarations );
column.addConstraint( predicateConstraint );
StringTemplate st = ruleGroup.getInstanceOf( "predicateMethod" );
st.setAttribute( "declaration",
declaration );
st.setAttribute( "declarationType",
((ClassObjectType) declaration.getObjectType()).getClassType().getName().replace( '$',
'.' ) );
setStringTemplateAttributes( st,
declarations,
predicateDescr.getText() );
st.setAttribute( "methodName",
classMethodName );
st.setAttribute( "text",
predicateDescr.getText() );
this.methods.add( st.toString() );
st = invokerGroup.getInstanceOf( "predicateInvoker" );
st.setAttribute( "package",
this.pkg.getName() );
st.setAttribute( "ruleClassName",
ucFirst( this.ruleDescr.getClassName() ) );
st.setAttribute( "invokerClassName",
ruleDescr.getClassName() + ucFirst( classMethodName ) + "Invoker" );
st.setAttribute( "methodName",
classMethodName );
st.setAttribute( "declaration",
declaration );
st.setAttribute( "declarationType",
((ClassObjectType) declaration.getObjectType()).getClassType().getName().replace( '$',
'.' ) );
setStringTemplateAttributes( st,
declarations,
predicateDescr.getText() );
st.setAttribute( "methodName",
classMethodName );
st.setAttribute( "text",
predicateDescr.getText() );